# coding:utf-8
# 曾山
# 时间 2022/5/4 14:15
import jwt
from jwt import PyJWTError

from comment.utils.const import SECRET_KEY,JWT_EXPIPY_SECOND
from flask import current_app
from comment.models.user import User
from datetime import datetime,timedelta

def generate_tokens(uid):
    '''
    根据已经登录之后的用户id，生成token
    :param uid:
    :return:
    '''
    payload ={
        'id':uid,
        #exp代表token的有效时间，而且必须是标准时间
        'exp':datetime.utcnow()+timedelta(seconds=JWT_EXPIPY_SECOND)
    }
    #参数一：payload是一个字典，代表加密的用户id和有效时间
    #参数二：密钥
    #参数三：算法
    s = jwt.encode(payload=payload,key=SECRET_KEY,algorithm='HS256')
    # 生成token
    return s



def verify_tokens(token_str):
    '''
    验证token 验证成功之后 返回用户id
    :param token_str:
    :return:
    '''
    try:

        data = jwt.decode(token_str,key=SECRET_KEY,algorithms='HS256')
    except PyJWTError as e:
        current_app.logger.info(e)
        return {'message':'token 验证失败'}

    #如果token验证成功，还需要看看当前用户状态是否正常
    user = User.query.filter(User.id==data['id']).first()
    if user and user.status != 0:
        return {'message':'数据库中的用户状态过期'}
    return {'id':user.id}
